#ifndef MSC_DEVICE_H
#define MSC_DEVICE_H

#include "msc_host.h"
#include "msc_host_vfs.h"
#include "freertos/FreeRTOS.h"
#include "freertos/event_groups.h"

#ifdef __cplusplus
extern "C" {
#endif

typedef struct {
    msc_host_device_handle_t device;
    msc_host_vfs_handle_t vfs_handle;
    msc_host_device_info_t g_info;
    EventGroupHandle_t event_group;
    TaskHandle_t task_handle;
    bool running;
} msc_device_t;

// 添加设备状态回调函数类型
typedef void (*msc_device_state_callback)(bool connected);

// 添加设置回调函数的接口
void msc_device_set_state_callback(msc_device_state_callback cb);

/**
 * @brief 初始化MSC设备
 * @return 成功返回0，失败返回错误码
 */
int msc_device_init(void);

/**
 * @brief 等待MSC设备连接
 * @return 返回设备地址
 */
uint8_t msc_device_wait_connect(void);

/**
 * @brief 注册VFS文件系统
 * @param device MSC设备句柄
 * @param mount_point 挂载点
 * @return 成功返回0，失败返回错误码 
 */
int msc_device_register_vfs(msc_host_device_handle_t device, const char *mount_point);

/**
 * @brief 获取设备信息
 * @param info 设备信息结构体指针
 * @return 成功返回0，失败返回错误码
 */
void msc_device_get_info(msc_host_device_info_t *info);

/**
 * @brief 处理MSC设备事件
 */
void msc_device_process_events(void);

/**
 * @brief 反初始化MSC设备
 */
void msc_device_deinit(void);

#ifdef __cplusplus
}
#endif

#endif // MSC_DEVICE_H